/*********************************************************************************/
/*                                                                               */
/*      ABZ Driver                                                               */
/*                                                                               */
/*      Last updated by:   CBS                                                   */
/*      Last update date:  13/02/05                                              */
/*      Revision:          0                                                     */
/*      Copyright:         DENSO                                                 */
/*                                                                               */
/*********************************************************************************/
#ifndef ABZ_H_
#define ABZ_H_

/*********************************************************************************/
/*  include files                                                                */
/*********************************************************************************/
#include "Std_Types.h"
#include "Abz_Cfg.h"

/*********************************************************************************/
/*  prototypes                                                                   */
/*********************************************************************************/

/*********************************************************************************/
/*  defines / data types / structs / unions / macros                             */
/*********************************************************************************/

/********************************/
/*  version information         */
/********************************/
#define ABZ_VENDOR_ID           1
#define ABZ_MODULE_ID         255
#define ABZ_INSTANCE_ID         0

#define ABZ_SW_MAJOR_VERSION    1
#define ABZ_SW_MINOR_VERSION    0
#define ABZ_SW_PATCH_VERSION    0

#define ABZ_AR_MAJOR_VERSION    0
#define ABZ_AR_MINOR_VERSION    0
#define ABZ_AR_PATCH_VERSION    0
/********************************/

/* interrupt vector number of used EMIOS channels */
#define INTC_CHANNEL_A_VectorNum       57
#define INTC_CHANNEL_B_VectorNum       58
#define INTC_CHANNEL_Z_VectorNum       59

typedef enum{
    ABZ_MODE_NORMAL,
    ABZ_MODE_SLEEP
}Abz_ModeType;

typedef U1 Abz_ChannelType; 

typedef U4 Abz_TickValueType;

typedef U2 Abz_EdgeNumberType;

typedef U2 Abz_AnglePositionType;

typedef U2 Abz_SpeedPolarityType;

typedef S4 Abz_RotationSpeedType;

/*********************************************************************************/
/*  constants                                                                    */
/*********************************************************************************/
extern const Abz_ConfigType AbzConfig;

/*********************************************************************************/
/*  variables                                                                    */
/*********************************************************************************/

/*********************************************************************************/
/*  API Functions                                                                */
/*********************************************************************************/
/*********************************************************************************/
/*  Service name    :   Abz_Init                                                 */
/*  Sync/Async      :   Synchronous                                              */
/*  Reentrancy      :   Non Reentrant                                            */
/*  Parameters (in) :   Pointer to ABZ driver configuration.                     */
/*  Return value    :   None                                                     */
/*  Discription     :   This service initializes the ABZ driver.                 */
/*********************************************************************************/
void Abz_Init(const Abz_ConfigType* ConfigPtr); 

#if ABZ_DE_INIT_API == STD_ON
/*********************************************************************************/
/*  Service name    :   Abz_DeInit                                               */
/*  Sync/Async      :   Synchronous                                              */
/*  Reentrancy      :   Non Reentrant                                            */
/*  Parameters (in) :   None                                                     */
/*  Return value    :   None                                                     */
/*  Discription     :   This service de-initializes the ABZ driver.              */
/*********************************************************************************/
void Abz_DeInit(void);
#endif /* ABZ_DE_INIT_API */

#if ABZ_SIGNAL_MEASUREMENT_API == STD_ON
/*********************************************************************************/
/*  Service name    :   Abz_StartSignalMeasurement                               */
/*  Sync/Async      :   Synchronous                                              */
/*  Reentrancy      :   Reentrant                                                */ 
/*  Parameters (in) :   Channel ID                                               */
/*  Return value    :   None                                                     */
/*  Discription     :   This service starts the measurement of signals.          */
/*********************************************************************************/
void Abz_StartSignalMeasurement (Abz_ChannelType Channel);

/*********************************************************************************/
/*  Service name    :   Abz_StopSignalMeasurement                                */
/*  Sync/Async      :   Synchronous                                              */
/*  Reentrancy      :   Reentrant                                                */
/*  Parameters (in) :   Channel ID                                               */
/*  Return value    :   None                                                     */
/*  Discription     :   This service stops the measurement of signals.           */
/*********************************************************************************/
void Abz_StopSignalMeasurement (Abz_ChannelType Channel);
#endif /* ABZ_SIGNAL_MEASUREMENT_API */

#if ABZ_GET_ANGLE_POSITION_API == STD_ON
/*********************************************************************************/
/*  Service name    :   Abz_GetAnglePosition                                     */
/*  Sync/Async      :   Synchronous                                              */
/*  Reentrancy      :   Non Reentrant                                            */
/*  Parameters (in) :   None                                                     */
/*  Return value    :   Angle position                                           */
/*  Discription     :   This service gets the current angle position of the      */
/*                      rotator in the RD converter.                             */
/*********************************************************************************/
Abz_AnglePositionType Abz_GetAnglePosition(void);
#endif /* ABZ_GET_ANGLE_POSITION_API */

#if ABZ_GET_ROTATION_SPEED_API == STD_ON
/*********************************************************************************/
/*  Service name    :   Abz_GetRotationSpeed                                     */
/*  Sync/Async      :   Synchronous                                              */
/*  Reentrancy      :   Non Reentrant                                            */
/*  Parameters (in) :   None                                                     */
/*  Return value    :   Rotation speed                                           */
/*  Discription     :   This service gets the current rotation speed of the      */
/*                      rotator in the RD convertor.                             */
/*********************************************************************************/
Abz_RotationSpeedType Abz_GetRotationSpeed(void);
#endif /* ABZ_GET_ROTATION_SPEED_API */

#if ABZ_GET_VERSION_INFO_API == STD_ON
/*********************************************************************************/
/*  Service name    :   Abz_GetVersionInfo                                       */
/*  Sync/Async      :   Synchronous                                              */
/*  Reentrancy      :   Non Reentrant                                            */
/*  Parameters (in) :   Pointer to ABZ driver configuration.                     */
/*  Return value    :   None                                                     */
/*  Discription     :   This service returns the version info of this module.    */
/*********************************************************************************/
void Abz_GetVersionInfo(Std_VersionInfoType* versioninfo);
#endif /* ABZ_GET_VERSION_INFO_API */

#endif